/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dialogs.emprestimos;

import dao.Dao;
import javax.swing.JOptionPane;
import libcontrol.model.Devolucao;
import libcontrol.model.Emprestimo;
import libcontrol.model.Exemplar;
import libcontrol.model.Usuario;

/**
 *
 * @author filipe
 */
public class JDialogRenovacao extends javax.swing.JDialog {

    /**
     * Creates new form JDialogRenovacao
     */
    public JDialogRenovacao(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabelCodigoObra = new javax.swing.JLabel();
        jTextFieldCodigoObra = new javax.swing.JTextField();
        jButtonRenovarObra = new javax.swing.JButton();
        jButtonFechar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jLabelCodigoObra.setFont(new java.awt.Font("Arial Black", 0, 14)); // NOI18N
        jLabelCodigoObra.setText("Código da Obra");

        jButtonRenovarObra.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icones/renovar.png"))); // NOI18N
        jButtonRenovarObra.setText("Renovar Obra");
        jButtonRenovarObra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonRenovarObraActionPerformed(evt);
            }
        });

        jButtonFechar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icones/cancelar.png"))); // NOI18N
        jButtonFechar.setText("Fechar");
        jButtonFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonFecharActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelCodigoObra)
                    .addComponent(jButtonFechar, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jTextFieldCodigoObra, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonRenovarObra, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(37, 37, 37)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCodigoObra)
                    .addComponent(jTextFieldCodigoObra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(61, 61, 61)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonFechar)
                    .addComponent(jButtonRenovarObra))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonRenovarObraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRenovarObraActionPerformed
        Exemplar exemplar = new Dao<Exemplar>(Exemplar.class).get(Integer.parseInt(jTextFieldCodigoObra.getText()));
        String menssagem;
        String titulo = "Erro";
        int tipo = JOptionPane.ERROR_MESSAGE;
        if (exemplar == null || exemplar.isExcluido()) {
            menssagem = "Exemplar não encontrado!";
        } else if (!exemplar.getObra().getCategoria().isEmprestavel()) {
            menssagem = "Obra não pode ser emprestada!";
        } else if (exemplar.getObra().hasReservas()) {
            menssagem = "Obra possui reservas!";
        } else {
            Emprestimo emprestimo = exemplar.getEmprestimoAtual();
            if (emprestimo == null) {
                menssagem = "Exemplar sem empréstimos!";
            } else {
                Usuario usuario = emprestimo.getUsuario();
                if (usuario.hasDebitosPendentes()) {
                    menssagem = "Usuário tem débitos pendentes!";
                } else if (usuario.hasDevolucoesAtrasadas()) {
                    menssagem = "usuário tem devoluções atrasadas!";
                } else {
                    Devolucao devolucao = new Devolucao();
                    devolucao.setUsuario(usuario);
                    devolucao.setExemplar(exemplar);
                    new Dao<Devolucao>(Devolucao.class).insert(devolucao);

                    Dao<Emprestimo> emprestimoDao = new Dao<>(Emprestimo.class);

                    emprestimo.setAtivo(false);
                    emprestimoDao.update(emprestimo);

                    emprestimo = new Emprestimo();
                    emprestimo.setExemplar(exemplar);
                    emprestimo.setUsuario(usuario);
                    emprestimoDao.insert(emprestimo);

                    menssagem = "Renovação efetuada com sucesso!";
                    tipo = JOptionPane.INFORMATION_MESSAGE;
                    titulo = "Sucesso";
                }
            }
        }
        JOptionPane.showMessageDialog(this, menssagem, titulo, tipo);
        if (tipo == JOptionPane.INFORMATION_MESSAGE) {
            dispose();
        }
    }//GEN-LAST:event_jButtonRenovarObraActionPerformed

    private void jButtonFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonFecharActionPerformed
        dispose();
    }//GEN-LAST:event_jButtonFecharActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonFechar;
    private javax.swing.JButton jButtonRenovarObra;
    private javax.swing.JLabel jLabelCodigoObra;
    private javax.swing.JTextField jTextFieldCodigoObra;
    // End of variables declaration//GEN-END:variables
}
